package com.xiangxiao.rpan.authority.service;

import com.xiangxiao.rpan.authority.model.AuthModuleInfo;
import com.xiangxiao.rpan.authority.model.Operation;
import com.xiangxiao.rpan.authority.model.UserRoleInfo;
import com.xiangxiao.rpan.authority.tree.Tree;
import com.xiangxiao.rpan.authority.tree.TreeNode;

import java.util.List;
import java.util.Set;

/**
 * @Projectname: IRoleService
 * @Author: xiangxiao
 * @Email: 573768011@qq.com
 * @Data:2023/3/26 1:55
 */
public interface IRoleService {
  /**
   * 获取用户的角色信息列表
   *
   * @param userId 用户id
   * @return 返回该用户的用户角色信息集合
   */
  List<UserRoleInfo> findRoleInfoOfUser(Long userId, Integer clientType);

  /**
   * 返回当前用户所有的操作
   *
   * @param userId 用户id
   * @return 返回用户的所有接口权限
   */
  List<Operation> findAllOperationListByUserId(Long userId);

  /**
   * 根据用户id查询所有的模块id
   *
   * @param userId 用户id
   * @return 返回用户所有权限的模块id集合
   */
  List<Long> findModuleIdByUserId(Long userId);

  /**
   * 获取用户绑定角色ID列表
   *
   * @param userId 用户id
   * @return 返回用户拥有的角色id集合
   */
  List<Long> listRoleIdOfUser(Long userId);


  /**
   * 模块递归父节点
   *
   * @param ids      结果
   * @param moduleId 从哪个moduleId节点开始向上递归
   * @param allTree  模块树数据源，递归过程中不变
   * @param downTree 模块树数据源，递归过程中逐渐变小
   * @param treeStr  用哪个tree "allTree"或者"downTree"
   * @return 返回该模块以及所有的父节点模块id集合
   */
  List<Long> getTreeModuleParentIpList(List<Long> ids, Long moduleId, Tree allTree, Tree downTree, String treeStr);

  /**
   * 登录返回权限信息
   *
   * @param userId 用户id
   * @param moduleIds 全部模块id
   * @return 返回用户的菜单以及菜单接口权限集合
   */
  List<AuthModuleInfo> findAuthorityByUserIds(Long userId, List<Long> moduleIds);

  /**
   * 返回权限数据树
   *
   * @param authorityInfoList 权限数据集合
   * @param moduleIds 全部模块id
   * @param roleIds 角色集合
   * @return 返回一颗菜单以及菜单接口的树
   */
  List<TreeNode> findAuthorityTree(List<AuthModuleInfo> authorityInfoList, List<Long> moduleIds, Set<Long> roleIds);
}
